თავი 2. მონაცემების ამორჩევა
პრედიკატი LIKE
პრედიკატით Like ორი სტრიქონის ტიპის მონაცემის შედარება ხორციელდება. ეს პრედიკატი წარმატებით გამოიყენება ტექსტში სიტყვის, ფრაზის მოსაძებნად, რომელთა მნიშვნელობა Like-თი განსაზღვრულ შაბლონს ემთხვევა. Like პრედიკატის სინტაქსი შემდეგია: <სტრიქონის ტიპის გამოსახულება> Like <შაბლონის სახით წარმოდგენილი სტრიქონის ტიპის გამოსახულება>. შედარების შედეგია True, თუ პირველი ოპერანდი ემთხვევა შაბლონს.
Like ოპერატორის შაბლონში შემდეგი სიმბოლოები გამოიყენება
# ნებისმიერი ერთი ციფრი 0_9
* ან % ნებისმიერი სიმბოლოს ან მათი კომბინაციის ნებისმიერი რაოდენობა
? ნებისმიერი ერთი სიმბოლო
[sia] სიმბოლოების სიაა. სიაში არსებულ ნებისმიერ სიმბოლოსთან დამთხვევისას Like ოპერატორის შედეგია True
[!sia] სიმბოლოების სიაა. სიაში არსებულ ნებისმიერ სიმბოლოსთან არდამთხვევისას Like ოპერატორის შედეგია True
მაგალითები:
gvari Like 'l%a' შედეგია ყველა გვარი, რომელიც იწყება ასოთი "ლ" და მთავრდება ასოთი "ა"
gvari Like 'l???a' შედეგია ხუთი ასოსგან შემდგარი გვარი, რომელშიც პირველი ასოა "ლ", ბოლო კი0 - "ა"
gvari Like '[!ab]%' შედეგია ყველა გვარი, რომელიც არ იწყება ასოებით "ა" ან "ბ"
gvari Like '[ab] %' შედეგია ყველა გვარი, რომელიც იწყება ასოებით "ა" ან "ბ"
gvari Like 'lo[!b]' შედეგია სამი ასოსგან შემდგარი გვარი, რომლის ბოლო ასო არ არის "ბ"
როდესაც Like პრედიკატის შაბლონის მნიშვნელობა შეიტანება ფორმაზე დატანილი TextBox-ის ტიპის ველიდან, ხშირად საჭირო ხდება ძებნის დროს გამოვიყენოთ Like პრედიკატი დაუშვათ ფორმაზე დატანილი ველის სახელია Vsek. ამ ველში ჩაწერილი სიმბოლოების მიხედვით, ცხრილიდან, რომლის სახელია tbdasaxeleba, ვეძებთ ისეთ დასახელებებს, რომლებიც ველში Vsek ჩაწერილი სიმბოლოების იდენტურია.
ამოვარჩიოთ ყველა იმ საქონლის დასახელება, რომელიც იწყება ასოებით "ატ".
ფორმიდან შეკითხვის მიცემის ინსტრუქცია შემდეგი იქნება:
"Select * FROM tbdasaxelebaa Where dasaxeleba Like ' " & Vsek & "%' "
ან
"Select * FROM tbdasaxelebaa Where dasaxeleba Like ' " & Vsek & "*' "
ცხრილიდან tbsaq_mireba ამორჩეულ იქნეს ჩანაწერები რომლებშიც "შეძენის ფასი"= 1.2 ან ზოგადად
ცხრილიდან tbsaq_mireba ამორჩეულ იქნეს ჩანაწერები რომლებშიც "შეძენის ფასი"=<ჩვენს მიერ მითითებული მნიშვნელობა>
პირველ შემთხვევაში შეკითხვა შემდეგნაირად ჩაიწერება.
SELECT saq_nom AS[saqonlis nomeri], tariri AS[miRebis TariRi], raodenoma AS[miRebuli raodenoba], sez_fasi AS[SeZenis fasi], FROM tbsaq_mireba
WHERE sez_fasi = 0.7
ORDER BY nomeri DESC, tariri
პროგრამა ჩაშენებული უნდა იყოს ფორმის მოდულში ან წარმოდგენილ იქნეს კონკრეტული შეკითხვის სახით. ასეთი შეკითხვების რაოდენობა ფაქტობრივად უსასრულოა. ამიტომ დიალოგური სისტემის დაპროექტებისას მომხმარებელს უნდა შეეძლოს ფორმაზე დატანილი ველში _ TextBox-ში ჩაწეროს საძებნი მნიშვნელობა. ჩვენს მიერ დაპროექტებულ ფორმაში ველი ”შემეკითხეთ” ამ მიზანს ემსახურება. მასში ჩაწერილი უნდა იქნეს საძებნი მნიშვნელობა. ასეთ შემთხვევაში ფორმის მოდულში ჩავწეროთ პროგრამა. პროგრამაში, შეკითხვის ინსტრუქციაში ამორჩევის პირობებში წერია: WHERE tbsaq_mireba.saq_nomeri= " & Val(Vsek) & "" & რაც ნიშნავს, რომ ცხრილიდან tbsaq_mireba ამორჩეულ იქნეს ის ჩანაწერები, რომელებშიც ცხრილის ველის მნიშვნელობა saq_nomeri ტოლია ჩვენს მიერ შეკითხვის ველში ჩაწერილი საქონლის ნომრის მნიშვნელობის.
Private Sub Rsek_Click()
Dim kit As String
Select Case Me.Famor.Value
Case 2
Me.Lsia.RowSource = ""
kit = " SELECT tbsaq_mireba.saq_nomeri AS[saqonlis kodi], tbsaq_mireba.tariri AS[miRebis TariRi]," & _
" tbsaq_mireba.raodenoba AS[miRebuli raodenoba], tbsaq_mireba.sez_fasi AS[SeZenis fasi] FROM tbsaq_mireba" & _
" WHERE tbsaq_mireba.saq_nomeri= " & Val(Vsek) & "" & _
" ORDER BY tbsaq_mireba.tariri"
With Me.Lsia
.ColumnHeads = True
.ColumnCount = 4
.ColumnWidths = "1,5in;1,4in;1,8in;1,2in"
.RowSourceType = "Table/Query"
.RowSource = kit
End With
End Select
End Sub
ცხრილიდან tbsaq_mireba ამორჩეულ იქნეს ის საქონლი, რომელიც არ ინახება პირველ საწყობში
SELECT tbsaq_mireba.saw_nomeri AS[sawyobis nomeri], tbsaq_mireba.saq_nomeri AS[saqonlis kodi], tbsaq_mireba.tariri AS[miRebis TariRi], tbsaq_mireba.raodenoba AS[miRebuli raodenoba], tbsaq_mireba.sez_fasi AS[SeZenis fasi] FROM tbsaq_mireba WHERE tbsaq_mireba.saw_nomeri <> 1
ზოგადად - ცხრილიდან tbsaq_mireba ამორჩეულ იქნეს ის საქონელი, რომელიც არ ინახება n-ურ საწყობში.
ფორმის მოდულში ჩაწერილი პროგრამა შემდეგია:
Private Sub Rsek_Click()
Dim kit As String
Select Case Me.Famor.Value
Case 2
Me.Lsia.RowSource = ""
kit = " SELECT tbsaq_mireba.saw_nomeri AS[sawyobis nomeri], tbsaq_mireba.saq_nomeri AS[saqonlis kodi], tbsaq_mireba.tariri AS[miRebis TariRi], tbsaq_mireba.raodenoba AS[miRebuli raodenoba], tbsaq_mireba.sez_fasi AS[SeZenis fasi] FROM tbsaq_mireba WHERE tbsaq_mireba.saw_nomeri <> " & Val(Vsek) & "" & _
" ORDER BY tbsaq_mireba.tariri"
With Me.Lsia
.ColumnHeads = True
.ColumnCount = 5
.ColumnWidths = "1,5in;1,5in;1,4in;1,8in;1,2in"
.RowSourceType = "Table/Query"
.RowSource = kit
End With
End Select
End Sub
ცხრილიდან tbsaq_mireba ამორჩეულ იქნეს იმ საქონლის დასახელებები, რომლთა ველში tariri არ არის ჩაწერილი შეძენის ფასი
SELECT tbsaq_mireba.saw_nomeri AS[sawyobis nomeri], tbsaq_mireba.saq_nomeri AS[saqonlis kodi], tbsaq_mireba.tariri AS[miRebis TariRi], tbsaq_mireba.raodenoba AS[miRebuli raodenoba], tbsaq_mireba.sez_fasi AS[SeZenis fasi] FROM tbsaq_mireba WHERE tbsaq_mireba.tariri IS NULL
ცხრილიდან tbsaq_mireba ამორჩეულ იქნეს იმ საქონლის დასახელებები, რომელთა შეძენის ფასის მნიშვნელობები მოთავსებულია დიაპაზონში 0.5-და 2.6-მდე
SELECT tbsaq_mireba.saw_nomeri AS[sawyobis nomeri], tbsaq_mireba.saq_nomeri AS[saqonlis kodi], tbsaq_mireba.tariri AS[miRebis TariRi], tbsaq_mireba.raodenoba AS[miRebuli raodenoba], tbsaq_mireba.sez_fasi AS[SeZenis fasi] FROM tbsaq_mireba WHERE tbsaq_mireba. sez_fasi BETWEEN 0.5 AND 2.6
ზოგადად - ცხრილიდან tbsaq_mireba ამორჩეულ იქნეს იმ საქონლის დასახელებები, რომელთა შეძენის ფასის მნიშვნელობა მოთავსებულია ჩვენს მიერ მითითებულ ფასის მნიშვნელობათა დიაპაზონში
ფორმაზე დავიტანოთ ორი ველი სახელებით V1 და V2 ამოსარჩევი ველით ქვედა და ზედა მნიშვნელობების მისათითებლად.
ფორმის მოდულში ჩაწერილი პროგრამა შემდეგია:
Private Sub Rsek_Click()
Dim kit As String
Select Case Me.Famor.Value
Case 2
Me.Lsia.RowSource = ""
kit = " SELECT tbsaq_mireba.saw_nomeri AS[sawyobis nomeri], tbsaq_mireba.saq_nomeri AS[saqonlis kodi], tbsaq_mireba.tariri AS[miRebis TariRi]," & _
" tbsaq_mireba.raodenoba AS[miRebuli raodenoba], tbsaq_mireba.sez_fasi AS[SeZenis fasi] FROM tbsaq_mireba" & _
" WHERE tbsaq_mireba.sez_fasi between " & V1 & "" & " And " & V2 & "" & _
" ORDER BY tbsaq_mireba.tariri"
With Me.Lsia
.ColumnHeads = True
.ColumnCount = 5
.ColumnWidths = "1,5in;1,5in;1,4in;1,8in;1,2in"
.RowSourceType = "Table/Query"
.RowSource = kit
End With
End Select
End Sub
პროგრამით ამორჩევის შედეგი/სურ. 8/